package com.quyeying.entity;

import com.baomidou.mybatisplus.annotation.*;
import com.baomidou.mybatisplus.extension.activerecord.Model;
import com.fasterxml.jackson.annotation.JsonInclude;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.springframework.validation.annotation.Validated;

import javax.validation.constraints.Max;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
import java.util.Map;

/**
 * <p>
 * 商品表
 * </p>
 *
 * @author jll
 * @since 2022-07-19
 */
@Data
@EqualsAndHashCode(callSuper = false)
@TableName("tbl_product")
@JsonInclude(JsonInclude.Include.NON_NULL)
public class TblProductEntity extends Model<TblProductEntity> {

    private static final long serialVersionUID = 1L;

    /**
     * 主键
     */
    @TableId(value = "id", type = IdType.AUTO)
    private Long id;

    /**
     * 商品类型 0 普通商品 1特价商品
     */
    private Integer productType;

    /**
     * 商家id
     */
    private Long merchantId;

    /**
     * 一级分类id
     */
    private Long categoryOneId;

    /**
     * 一级分类名称
     */
    @TableField(exist = false)
    private String categoryOneName;

    /**
     * 二级分类id
     */
    private Long categoryTwoId;

    /**
     * 二级分类名称
     */
    @TableField(exist = false)
    private String categoryTwoName;

    /**
     * 三级分类id
     */
    private Long categoryThreeId;

    /**
     * 三级分类名称
     */
    @TableField(exist = false)
    private String categoryThreeName;

    /**
     * 名称
     */
    @NotNull(message = "名称不能为空")
    @Size(min = 1, max = 200, message = "名称应该在1-200字符之间")
    private String productName;

    /**
     * 浏览量
     */
    private Long productBrowse;

    /**
     * 上下架状态   0上架   1下架
     */
    private Integer productBuyZt;

    /**
     * 逻辑删除   0未删除   1已删除  (默认为 0)
     */
    @TableLogic
    private Integer deleted;

    /**
     * 逻辑删除时间
     */
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private Date deletedTime;

    /**
     * 创建时间
     */
    @TableField(fill = FieldFill.INSERT)
    private Date createTime;

    /**
     * 修改时间
     */
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private Date updateTime;

    /**
     * 轮播图
     */
    @TableField(exist = false)
    private List<TblProductImageEntity> tblProductImageEntityList;

    /**
     * 商品介绍扩展
     * @return
     */
    @TableField(exist = false)
    private TblProductExtendEntity productIntroduceExtend;

    /**
     * 商品介绍扩展图片list
     */
    @TableField(exist = false)
    private List<TblProductExtendImageEntity> productIntroduceExtendImages;

    /**
     * 商品规格
     */
    @TableField(exist = false)
    private List<TblProductSkuEntity> productSkuEntityList;

    /**
     * 商品参数
     */
    @TableField(exist = false)
    private List<TblProductParamEntity> productParamEntityList;

    /**
     * 商品封面图
     * @return
     */
    @TableField(exist = false)
    private String productCover;

    /**
     * 商品划线价
     * @return
     */
    @TableField(exist = false)
    private String crossedPrice;

    /**
     * 商品售价
     * @return
     */
    @TableField(exist = false)
    private String productPrice;

    /**
     * 最新视频地址
     */
    @TableField(exist = false)
    private Map<String, Object> videoEntity;

    /**
     * 商品最低价
     * @return
     */
    @TableField(exist = false)
    private String minPrice;

    /**
     * 商品最高价
     * @return
     */
    @TableField(exist = false)
    private String maxPrice;


    /**
     * 商品轮播修改时新增图片list（jll加）
     */
    @TableField(exist = false)
    private List<TblProductImageEntity> tblProductImageAddList;

    /**
     * 商品轮播修改时删除图片list（jll加）
     */
    @TableField(exist = false)
    private List<TblProductImageEntity> tblProductImageDeleteList;


    /**
     * 商品介绍扩展图片新增list
     */
    @TableField(exist = false)
    private List<TblProductExtendImageEntity> productIntroduceExtendImagesAdd;


    /**
     * 商品介绍扩展图片删除list
     */
    @TableField(exist = false)
    private List<TblProductExtendImageEntity> productIntroduceExtendImagesDelete;


    /**
     * 商户信息
     */
    @TableField(exist = false)
    private Map<String, Object> merchantInfo;

    /**
     * 特价商品的skuId
     */
    @TableField(exist = false)
    private Long specialSkuId;

    @Override
    protected Serializable pkVal() {
        return this.id;
    }

}
